SPSS – 将字符串转换为日期变量

作者:Ruben Geert van den Berg,发表于 SPSS 日期与时间变量 之下。

要将 字符串变量 转换为 日期变量ALTER TYPE 命令是首选方法。本教程将演示如何执行此操作,并指出一些注意事项。对于无法使用 ALTER TYPE 的用户,我们将提供一些替代方案。

SPSS ALTER TYPE

以下 语法 首先创建一个包含 8 个字符串变量的迷你数据集。这些变量演示了 8 种最常见的日期格式。接下来,通过使用 ALTER TYPE,将每个字符串变量转换为日期变量。

SPSS 字符串转换为日期语法

***1. 创建迷你数据集。**
data list free/d1 to d8(8a20).
begin data
31-dec-99 31.dec.1999 12/31/99 12-31-1999 31.12.99 31/12/1999 99-12-31 1999.12.31
end data.

***2. 将所有字符串转换为日期。**
alter type d1(date9).
alter type d2(date11).
alter type d3(adate8).
alter type d4(adate10).
alter type d5(edate8).
alter type d6(edate10).
alter type d7(sdate8).
alter type d8(sdate10).

字符串转换为日期语法说明

  • ALTER TYPE 中的 日期格式 告诉 SPSS 哪个部分是年、月和日。因此,如果 1/2/3 表示 2003 年 2 月 1 日,则使用 EDATE8 (dd-mm-yy)。如果它表示 2003 年 1 月 2 日,则使用 ADATE8 (mm-dd-yy),依此类推。
  • 在原始字符串变量中,年、月和日可以用短划线 (-)、斜杠 (/)、句点 (.) 甚至这些符号的组合分隔。使用哪个符号并不重要。
  • 如果年份使用两位数字,则数字 0 到 44 将被解释为 2000 年到 2044 年。数字 45 到 99 将被解释为 1945 年到 1999 年。有关更多信息,请参见 字符串中的两位数年份 - 注意事项
  • ALTER TYPE 会覆盖现有值,并且不可逆。只要您遵循良好的实践,例如从 语法 工作,通常不会出现大问题。此外,您可以在 ALTER TYPE 之前使用 SPSS 克隆变量工具 (SPSS Clone Variables Tool)

在没有 Alter Type 的情况下将 SPSS 字符串转换为日期

请注意,ALTER TYPE 只能用于有限数量的日期格式。某些更特殊的格式可能需要更灵活的方法。其次,SPSS 15 及更早版本的用户没有 ALTER TYPE,因为它是在版本 16 中引入的。

对于这两种情况,我们通常会使用 SUBSTR 提取年、月和日,通常与 INDEXRINDEX 结合使用。然后,我们将使用 DATE.DMY 函数将它们转换为 SPSS 日期变量。最后,我们将使用 FORMATS 将其保存的秒数显示为更易读的日期。

SPSS 字符串转换为日期语法

***1. 创建迷你数据集。**
data list free/s1 s2(2a20).
begin data
1.1.1999 1-jan-99 2.28.1999 2-feb-99 3.31.1999 3-mar-99 4.30.1999 4-apr-99
5.31.1999 5-may-99 6.30.1999 6-jun-99 
7.31.1999 7-jul-99 8.31.1999 8-aug-99 9.30.1999 9-sep-99 10.31.1999 10-oct-99
11.30.1999 11-nov-99 12.31.1999 12-dec-99 
end data.

***2. 从字符串中提取日、月和年。**
compute day = number(char.substr(s1,char.index(s1,'.') + 1,char.rindex(s1,'.') - char.index(s1,'.')),f2.0).
compute month = number(char.substr(s1,1,char.index(s1,'.') - 1),f2.0).
compute year = number(char.substr(s1,char.rindex(s1,'.') +1),f4.0).
exe.

***3. 计算日期变量。**
compute d1 = date.dmy(day,month,year).
exe.

***4. 显示为日期。**
formats d1(adate10).

处理字母表示的月份

前面的示例转换了第一个字符串变量,但第二个稍微困难一些。这是因为 DATE.DMY 需要三个数字,但月份现在显示为字母(例如,JANFEB 等)。解决此问题的一个简单方法是使用 DO REPEAT 将月份替换为数字(0012),如下所示。完成此操作后,可以按照前面的示例进行操作。

***用月份数字替换字符串中的月份字母。**
do repeat s = 'jan' 'feb' 'mar' 'apr' 'may' 'jun' 'jul' 'aug' 'sep' 'oct' 'nov' 'dec' / n = 1 to 12.
compute s2 = replace(s2,s,string(n,n2)).
end repeat.
exe.